iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
1
自我挑戰組

Vue 與 Element UI 兩三事系列 第 14

Vue 與 Element UI 兩三事#14 Vuex 狀態管理器

  • 分享至 

  • xImage
  •  

前言:
當我們的專案內容越來越大,組件越切越多時,我們有很高的機率會需要在多個組件內使用同一個資料狀態,無論是多個頁面依賴同一個狀態或是多個頁面會需要讀取/更改同一個狀態時,都會遇到十分多的問題,那怕解決了也很容易造成維護上的困難,因此, Vuex 誕生了
正文:
我們先看一下透過 vue-cli 所建立的 vuex 有甚麼內容吧

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

state:
在 vuex 中,我們可以將多個組件同時會用到的狀態放置 store.state 中,當我們需要時引用他即可,由於 vuex 採用單一狀態樹的結構,因此在 store 下所有狀態會被集中在這裡

mutation:
當我們需要更改 vuex 狀態時,唯一的方法是透過提交 mutation 去對狀態進行更改,下方提供一個例子
store

state: {
    count: 0
},
mutations: {
    increment: function(state,payload){
        state.count += payload.amount
    }
}

test.vue

<p>{{count}}</p>
<button @click="addCount(5)">count + 5</button>
import store from '@/store/index.js'
methods: {
    addCount: function(addedCount){
        store.commit({
            type: 'increment',
            amount: addedCount
        })
    }
},
computed: {
    count: function(){
        return store.state.count
    }
}

我們必須透過 commit 來呼叫 vuex 中的 mutation 才能對數據進行更改

actions:
actions 與 mutation 類似,一樣是針對更改 state 使用,差別是 actions 可以接受非同步事件,而 mutation 則僅接受同步事件
mutation 是透過 store.commit() 來進行資料更改,actions 則是透過 store.dispatch() 去進行資料更改

module:
前面有提到,vuex採用的是單一狀態樹的結構,當我們專案變得越來越複雜時狀態也隨之變的更多,因此 vuex 允許我們使用 module 來將 store 切割成多個模組,而每個模組都有屬於自己的 stateactionsmutation

vuex 內容先介紹到這邊,和 router 一樣,還有很多內容可以去挖掘,這邊先講些最基本的概念,深入的內容等到後續實戰在繼續分享吧


上一篇
Vue 與 Element UI 兩三事#13 第二周回顧
下一篇
Vue 與 Element UI 兩三事#15 初探 element-ui
系列文
Vue 與 Element UI 兩三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言